/*
    - 何为进程？
        - 程序的运行都需要有自己专属的内存空间，简单的把这块空间理解为进程
        - 每个应用至少有一个进程，且进程之间相互独立，即使要通信，也要双方同意
        - 相互独立的原因也很简单，你想像一下，如果不独立，以后微信出问题崩溃了，QQ也跟着崩溃了，然后一堆应用全因为微信崩溃而崩溃了，那不就很搞了吗？
    
    - 何为线程？
        - 有了进程之后，我们就可以运行代码了
        - 真正运行代码的 '人' ，我们称之为 '线程'
        - 一个进程至少要有一个线程，所以进程在开启后会自动创建一个线程来运行代码，这个线程被称为主线程
        - 如果主线程需要同时执行多块代码，主线程就会启动更多的线程来执行代码，所以一个进程中可以包含多个线程

    - 浏览器有哪些进程和线程?
        - 浏览器是一个多进程多线程的应用程序
            - 现在的浏览器的内部工作极其复杂，复杂度直逼操作系统
            - 为了避免相互影响，减少连环崩溃的几率，启动浏览器后，它会自动启动多个进程
            - 以谷歌浏览器为例，右上角三个点 -> 更多工具 -> 任务管理器，即可看到浏览器启动的进程
            - 其中，最主要的进程有：
                - 浏览器进程：
                    主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务
                - 网络进程
                    负责加载网络资源。网络进程的内部会启动多个线程来处理不同的网络任务
                - 渲染进程(重点)
                    渲染进程启动后，会开启一个渲染主线程，主线程负责执行html、css、js代码
                    默认情况下，浏览器会为每个标签页开启一个新的渲染进程，以保证不同的标签页之间不相互影响;

    - 渲染主线程是怎么工作的
        - 渲染主线程是浏览器最繁忙的线程，他要处理的任务包括但不限于
            - 解析html、css，计算样式，处理图层，执行全局js代码、每秒把页面画60次、执行事件处理函数、执行计时器回调函数
        - 要处理这么多任务, 主线程遇到了一个前所未有的难题，那就是如何调度任务?
            - 假设以下情况
                - 我正在执行一个JS函数，执行到一半的时候用户点击了按钮，我该立即去执行点击事件的处理函数吗?
                - 我正在执行一个JS 函数，执行到一半的时候某个计时器到达了时间，我该立即去执行它的回调吗?
                - 浏览器进程通知我"用户点击了按钮"，与此同时，某个计时器也到达了时间，我应该处理哪一个呢？
                - ......
        - 浏览器想到了一个绝妙的主意处理这个问题，那就是：排队.
            1．在最开始的时候,渲染主线程会进入一个无限循环
            2． 每一次循环会检查消息队列中是否有任务存在。如果有，就取出第一个任务执行，执行完一个后进入下一次循环;如果没有，则进入休眠状态。
            3．其他所有线程(包括其他进程的线程）可以随时向消息队列添加任务。新任务会加到消息队列的末尾。在添加新任务时，如果主线程是休眠状态，则会将其唤醒以继续循环拿取任务
            这样一来，就可以让每个任务有条不紊的、持续的进行下去了。
            整个过程，被称之为事件循环（消息循环)

    - 何为异步?
        

        
*/